#include<iostream>
#include<map>
#include<set>
#include<string>
#include<ctime>



template<typename T>

void Print(const T&v)
{
    for(auto ite = v.begin();ite != v.end();ite++)
    {
        std::cout<<*ite<<" ";
    }
    std::cout<<std::endl;
}

int main()
{
    // std::pair<int,std::string> p = {1,"zhangsan"};//键值对  

    // std::pair<int,std::string> p = std::make_pair<int,std::string>(1,"zhangsan");

    // auto p = std::make_pair(1,"zhangsan");

    // auto p = std::make_pair(1,std::string("zhangsan"));
    
    // std::cout<<p.first<<" "<<p.second<<std::endl;



    // //map 的 键值唯一
    // std::map<int,std::string> m;

    // m.insert({1,"zhangsan"});

    // m.insert(std::make_pair(3,"lisi"));

    // m.insert(std::pair<int,std::string>{2,"zhangsan"});


    // m[2]="zhaoliu";//存在就修改,不存在就新增

    // for(auto ite = m.begin();ite != m.end();ite++)
    // {
    //     std::cout<<ite->first<<" "<<ite->second<<" ";
    //     std::cout<<std::endl;
    // }
    
    // auto ite = m.find(2);

    // if(ite == m.end())
    // {
    //     std::cout<<"没找到"<<std::endl;
    // }
    // else
    // {
    //     std::cout<<ite->second<<std::endl;
    // }




    // m.erase(1);
    
    // auto ite = m.extract(1); // 取出来的是节点的指针  只是把节点从树里拿出来了 还是存在的
    
    // m.insert(std::move(ite));

    // for(auto ite = m.begin();ite != m.end();ite++)
    // {
    //     std::cout<<ite->first<<" "<<ite->second<<" ";
    //     std::cout<<std::endl;
    // }

    // srand(time(nullptr));
    // int a[100];

    // for(int i=0;i<100;i++)
    // {
    //     a[i] = rand()%10 +1;
    //     std::cout<<a[i]<<" ";
    // }
    // std::cout<<std::endl;

    // //求出出现次数最多的数 输出它的值 和 它的下标
    // std::map<int,int> m;
    // for(int i=0;i<100;i++)
    // {
    //     m[a[i]]++;
    // }

    // auto Maxite = m.begin();
    // for(auto ite = m.begin();ite != m.end();ite++)
    // {
    //     if(ite->second>Maxite->second) 
    //         Maxite = ite;
    //     std::cout<<ite->first<<" "<<ite->second<<std::endl;
    // }
    
    // std::cout<<Maxite->first<<" "<<Maxite->second<<std::endl;






    // std::multiset<int> s;
    // s.insert(1);
    // s.insert(1);
    // s.insert(1);

    // for(auto ite = s.begin();ite != s.end();ite++)
    // {
    //     std::cout<< *ite <<std::endl;
    // }

    // //第一个迭代器
    // auto ite = s.find(1);
    // if(ite == s.begin())
    // {
    //     std::cout<<"找的第一个"<<std::endl;
    // }



    std::multimap<int,std::string> m;

    m.insert({1,"zhangsan"}) ;
    m.insert({1,"lisi"}) ;
    m.insert({1,"wangwu"}) ;

    for(auto ite = m.begin();ite != m.end();ite++)
    {
        std::cout<< ite->first<<" "<< ite->second <<std::endl;
    }


    m.erase(1);
    for(auto ite = m.begin();ite != m.end();ite++)
    {
        std::cout<< ite->first<<" "<< ite->second <<std::endl;
    }
    return 0;
}